<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<style>
    * {
        padding: 0;
        margin: 0;
    }

    .wrap {
        width: 300px;
        margin: 100px auto 0;
    }

    table {
        border-collapse: collapse;
        border-spacing: 0;
        border: 1px solid #c0c0c0;
        width: 300px;
    }

    th,
    td {
        border: 1px solid #d0d0d0;
        color: #404060;
        padding: 10px;
    }

    th {
        background-color: #09c;
        font: bold 16px "微软雅黑";
        color: #fff;
    }

    td {
        font: 14px "微软雅黑";
        text-align: center;
    }

    tbody tr {
        background-color: #f0f0f0;
    }

    tbody tr:hover {
        cursor: pointer;
        background-color: #fafafa;
    }
</style>

<body>
<div class="wrap">
    <table>
        <thead>
        <tr>
            <th>
                <input id="j_cbAll" type="checkbox"/>
            </th>
            <th>商品</th>
            <th>价钱</th>
        </tr>
        </thead>
        <tbody id="j_tb">
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPhone8</td>
            <td>8000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Pro</td>
            <td>5000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>iPad Air</td>
            <td>2000</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox"/>
            </td>
            <td>Apple Watch</td>
            <td>2000</td>
        </tr>
        </tbody>
    </table>
</div>

<script>
    // 1.全选和取消全选的做法
    // 思路: 让下面所有复选框checked属性 (选中状态) 跟随全选按钮即可
    var j_cbAll = document.querySelector('#j_cbAll');
    var checkList = document.querySelectorAll('#j_tb input');


    j_cbAll.onclick = function () {
        for (let checkListElement of checkList) {
            checkListElement.checked = this.checked;
        }
    }

    // 2.下面复选框需要全部选中, 上面全选才能选中做法
    // 给下面所有复选框绑定点击事件, 每次点击, 都要循环查看所有复选框是否有没选中的
    // 如果有一个没选中的, 上面全选就不选中
    for (let checkListElement of checkList) {
        checkListElement.onclick = function () {
            // flag控制全选按钮是否选中
            let flag = true;
            // 每次点击下面的复选框都要循环检查4个小按钮是否全被选中
            for (let innerEle of checkList) {
                if (!innerEle.checked) {
                    flag = false;
                    break;  // 只要有一个没有选中, 就退出循环
                }
            }
            j_cbAll.checked = flag;
        }
    }

</script>

</body>
</html>
